package repositorio;

import equipamento.IRepositorioEquipamento;
import naturezaChamado.IRepositorioNaturezaChamado;
import nivelUrgencia.IRepositorioNivelUrgencia;
import pessoa.cliente.IRepositorioCliente;
import shared.DocumentoXML;
import pessoa.usuario.IRepositorioUsuario;
import shared.excecao.ArquivoXMLNaoEncontradoException;
import pessoa.usuario.RepositorioUsuarioArray;
import java.io.File;

public abstract class FabricaRepositorio {
    
    private static FabricaRepositorio instancia = null;
    private static DocumentoXML docXML = null;

    protected FabricaRepositorio() {
    }
    
    public static FabricaRepositorio getInstancia() throws Exception  {
        if (docXML == null) {
            docXML = 
                new DocumentoXML(
                    new File("").getAbsolutePath() + 
                    System.getProperty("file.separator") + 
                    "conf.xml"
                );    
        }                                

        if (instancia == null) {
            if (docXML.getValor("gravacao").equalsIgnoreCase("Array")) {
                instancia = new FabricaRepositorioArray();                    
            } else if (docXML.getValor("gravacao").equalsIgnoreCase("Arquivo")) {
                instancia = new FabricaRepositorioArquivo();
            }                                
        }
        
        return instancia;
    }    

    public abstract IRepositorioUsuario getInstanciaRepositorioUsuario();
    public abstract IRepositorioCliente getInstanciaRepositorioCliente();
    public abstract IRepositorioEquipamento getInstanciaRepositorioEquipamento();    
    public abstract IRepositorioNivelUrgencia getInstanciaRepositorioNivelUrgencia();
    public abstract IRepositorioNaturezaChamado getInstanciaRepositorioNaturezaChamado();
}
